//package com.easy.frame.common.mq.rabbit.producer;
//
//import com.easy.frame.servers.sys.entity.TOrder;
//import com.easy.frame.servers.sys.mapper.BrokerMessageLogMapper;
//import org.springframework.amqp.rabbit.connection.CorrelationData;
//import org.springframework.amqp.rabbit.core.RabbitTemplate;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.Resource;
//import java.util.Date;
//
///**
// * @author 86131
// */
//@Component
//public class RabbitOrderSender {
//
//    @Resource
//    private BrokerMessageLogMapper brokerMessageLogMapper;
//
//    /**
//     * 回调函数: confirm确认
//     */
//    final RabbitTemplate.ConfirmCallback confirmCallback = new RabbitTemplate.ConfirmCallback() {
//        @Override
//        public void confirm(CorrelationData correlationData, boolean ack, String cause) {
//            System.err.println("correlationData: " + correlationData);
//            String messageId = correlationData.getId();
//            if(ack){
//                //如果confirm返回成功 则进行更新
//                brokerMessageLogMapper.changeBrokerMessageLogStatus(messageId, RabbitConstants.ORDER_SEND_SUCCESS, new Date());
//            } else {
//                //失败则进行具体的后续操作:重试 或者补偿等手段
//                System.err.println("异常处理...");
//            }
//        }
//    };
//
//    /**
//     * 发送消息方法调用: 构建自定义对象消息
//     */
//    public void sendOrder(TOrder order) {
//        // 通过实现 ConfirmCallback 接口，消息发送到 Broker 后触发回调，确认消息是否到达 Broker 服务器，也就是只确认是否正确到达 Exchange 中
//        RabbitUtil.RabbitServer.I.getInstance().setConfirmCallback(confirmCallback);
//        //消息唯一ID
//        CorrelationData correlationData = new CorrelationData(order.getMessageId());
//        RabbitUtil.RabbitServer.I.getInstance().convertAndSend
//                (RabbitConstants.Exchange.EF_HANDLER_EXCHANGE, RabbitConstants.Key.EF_HANDLER+".ABC", order, correlationData);
//    }
//}
